package example;

/**
 * 装饰类：抽象装饰角色
 * 1、继承抽象构建角色类
 * 2、聚合了抽象构建角色类:我们要装饰的对象
 * 3、本类也要定义为抽象的类，因为具体的装饰对象也不确定。所以由具体的实现类去定义
 */
public abstract class Detractor extends  FastFood {
    //声明快餐类的变量，也就是我们要装饰的对象，即具体的构建角色类
    //此对象也可以理解为一个递归后的对象，例如炒饭加鸡蛋。他也是一个FastFood对象，再新增一个配料的话也是在此基础之上进行
    private FastFood fastFood;


    public Detractor(double price, String desc,FastFood fastFood) {
        super(price, desc);
        this.fastFood=fastFood;
    }

    //获取到被装饰这者对象
    public FastFood getFastFood() {
        return fastFood;
    }

    public void setFastFood(FastFood fastFood) {
        this.fastFood = fastFood;
    }

    @Override
    public double cost() {
        //计算价格就是当前对象的价格加上原有对象的价格。
        return getPrice()+fastFood.cost();
    }
}
